/*
 * Auto generated C++ header for Mass Effect 2.
 *	by _silencer.
 */

#ifndef UNREAL_SDK_GAME_GFxUI_H
#define UNREAL_SDK_GAME_GFxUI_H

#include "unreal_game_global.h"

namespace game
{
	using namespace unreal;

	struct GCReference
	{
		Object* m_object; //offset = 0, size = 4
		Int m_count; //offset = 4, size = 4
	};

	class GFxEngine: public Object
	{
		DECLARE_PACKAGE_CLASS( GFxEngine, Object, GFxUI )

	public:

		Array<GCReference> GCReferences; //offset = 60, size = 12
		Int RefCount; //offset = 72, size = 4
	};

	class GFxFSCmdHandler: public Object
	{
		DECLARE_PACKAGE_CLASS( GFxFSCmdHandler, Object, GFxUI )

	public:

		Bool FSCommand( GFxMovie* Movie, String Cmd, String arg );
	};

	class GFxInteraction: public Interaction
	{
		DECLARE_PACKAGE_CLASS( GFxInteraction, Interaction, GFxUI )

	public:

		Pointer VfTable_FCallbackEventDevice; //offset = 108, size = 4

		void NotifyGameSessionEnded();
		GFxMovie* GetFocusMovie();
		Bool SetFocusMovie( String MovieName, Bool captureInput );
	};

	class GFxGameViewportClient: public GameViewportClient
	{
		DECLARE_PACKAGE_CLASS( GFxGameViewportClient, GameViewportClient, GFxUI )

	public:

		Class* GFxUIControllerClass; //offset = 292, size = 4
		GFxInteraction* GFxUIController; //offset = 296, size = 4

		Bool Init( String OutError, Int oldlen );
	};

	class GFxMovieInfo: public Object
	{
		DECLARE_PACKAGE_CLASS( GFxMovieInfo, Object, GFxUI )

	public:

		Array<Byte> RawData; //offset = 60, size = 12
		Array<Object*> References; //offset = 72, size = 12
		Array<Object*> UserReferences; //offset = 84, size = 12
		Bool bUsesFontlib: 1; //offset = 96, size = 4
		Bool bUseGFxExport: 1; //offset = 96, size = 4
		Bool bUseCompressedTextures: 1; //offset = 96, size = 4
		String SourceFile; //offset = 100, size = 12
		String GFxExportCmdLine; //offset = 112, size = 12
		Array<Object*> CompressedTextureReferences; //offset = 124, size = 12
	};

	enum ASType
	{
		AS_Undefined,
		AS_Null,
		AS_Number,
	};

	enum GFxRenderTextureMode
	{
		RTM_Opaque,
		RTM_Alpha,
	};

	enum GFxTimingMode
	{
		TM_Game,
		TM_Real,
	};

	struct ASValue
	{
		Byte Type; //offset = 0, size = 1
		Bool B: 1; //offset = 4, size = 4
		Float N; //offset = 8, size = 4
		String S; //offset = 12, size = 12
	};

	struct ExternalTexture
	{
		String Resource; //offset = 0, size = 12
		Texture* Texture; //offset = 12, size = 4
	};

	class GFxMovie: public Object
	{
		DECLARE_PACKAGE_CLASS( GFxMovie, Object, GFxUI )

	public:

		GFxMovieInfo* MovieInfo; //offset = 60, size = 4
		TextureRenderTarget2D* RenderTexture; //offset = 64, size = 4
		Pointer pMovie; //offset = 68, size = 4
		Pointer pCaptureKeys; //offset = 72, size = 4
		GFxFSCmdHandler* FSCmdHandler; //offset = 76, size = 4
		Object* ExternalInterface; //offset = 80, size = 4
		Array<Name> CaptureKeys; //offset = 84, size = 12
		Int nZOrder; //offset = 96, size = 4
		Float CreationTime; //offset = 100, size = 4
		Float fRenderTime; //offset = 104, size = 4
		Float fAdvanceTime; //offset = 108, size = 4
		Array<ExternalTexture> ExternalTextures; //offset = 112, size = 12
		Byte TimingMode; //offset = 124, size = 1
		Byte RenderTextureMode; //offset = 125, size = 1
		Bool bGammaCorrection: 1; //offset = 128, size = 4

		void ActionScript( String Path );
		void SetExternalInterface( Object* H );
		void SetFsCmdHandler( GFxFSCmdHandler* H );
		Bool SetVariableStringArray( String Path, Int Index, Array<String> arg );
		Bool SetVariableFloatArray( String Path, Int Index, Array<Float> arg );
		Bool SetVariableIntArray( String Path, Int Index, Array<Int> arg );
		Bool SetVariableArray( String Path, Int Index, Array<ASValue> arg );
		Bool GetVariableStringArray( String Path, Int Index, Array<String> arg );
		Bool GetVariableFloatArray( String Path, Int Index, Array<Float> arg );
		Bool GetVariableIntArray( String Path, Int Index, Array<Int> arg );
		Bool GetVariableArray( String Path, Int Index, Array<ASValue> arg );
		void SetVariableString( String Path, String S );
		void SetVariableNumber( String Path, Float F );
		void SetVariableBool( String Path, Bool B );
		void SetVariable( String Path, ASValue arg );
		String GetVariableString( String Path );
		Float GetVariableNumber( String Path );
		Bool GetVariableBool( String Path );
		ASValue GetVariable( String Path );
		ASValue Invoke( String method, Array<ASValue> args );
		void SetTimingMode( Byte Mode );
		void Pause( Bool pauseplay );
		void Advance( Float Time );
		Bool SetExternalTexture( String Resource, Texture* Texture );
		void ClearCaptureKeys();
		void AddCaptureKey( Name Key );
		void SetFocus( Bool captureInput, Bool Focus );
		void SetViewport( Int X, Int Y, Int Width, Int Height );
		GameViewportClient* GetGameViewportClient();
		void SetMovieInfo( GFxMovieInfo* Data );
		void OnClose();
		void Close( Bool Unload );
		Bool Start( Bool StartPaused );
	};

	class GFxAction_CloseMovie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_CloseMovie, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4

		Bool IsValidLevelSequenceObject();
	};

	class GFxAction_GetVariable: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_GetVariable, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4
		String Variable; //offset = 244, size = 12

		Bool IsValidLevelSequenceObject();
	};

	class GFxAction_Invoke: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_Invoke, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4
		String MethodName; //offset = 244, size = 12
		Array<ASValue> Arguments; //offset = 256, size = 12

		Bool IsValidLevelSequenceObject();
	};

	class GFxAction_OpenMovie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_OpenMovie, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4
		Bool bTakeFocus: 1; //offset = 244, size = 4
		Bool bCaptureInput: 1; //offset = 244, size = 4
		Bool bStartPaused: 1; //offset = 244, size = 4

		Bool IsValidLevelSequenceObject();
	};

	class GFxAction_SetCaptureKeys: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_SetCaptureKeys, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4
		Array<Name> CaptureKeys; //offset = 244, size = 12
	};

	class GFxAction_SetFocus: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_SetFocus, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4
		Bool bCaptureInput: 1; //offset = 244, size = 4
	};

	class GFxAction_SetVariable: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( GFxAction_SetVariable, SequenceAction, GFxUI )

	public:

		GFxMovie* Movie; //offset = 240, size = 4
		String Variable; //offset = 244, size = 12

		Bool IsValidLevelSequenceObject();
	};

	class GFxEvent_FsCommand: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( GFxEvent_FsCommand, SequenceEvent, GFxUI )

	public:

		GFxMovie* Movie; //offset = 280, size = 4
		String FSCommand; //offset = 284, size = 12
	};

	class GFxFSCmdHandler_Kismet: public GFxFSCmdHandler
	{
		DECLARE_PACKAGE_CLASS( GFxFSCmdHandler_Kismet, GFxFSCmdHandler, GFxUI )

	public:

		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> Events; //offset = 60, size = 20

		Bool FSCommand( GFxMovie* Movie, String Cmd, String arg );
	};
}

#endif
